package top.hudk.design.single;

/**
 * 作用：静态内部类方式实现单例模式
 *
 * @author hudk
 * @date 2020/3/1 15:11
 */
public class InnerClassSingleton {

    /**
     * 静态内部类，是在被使用的时候，JVM虚拟机才会对他进行实例化
     * 所以，静态内部类方式，设计单例，就是利用了静态内部类的这种特点
     */
    private static class InnerClassHolder{
        private static InnerClassSingleton instence = new InnerClassSingleton();
    }

    private InnerClassSingleton(){
        /**
         * 这里的判断，是为了避免反射攻击造成的多实例出现。
         */
        if(InnerClassHolder.instence != null){
            throw new RuntimeException("本对象是单例模式，系统内不允许多出现个实例");
        }
    }
    public static InnerClassSingleton getInstance(){
        //运行到这里，JVM虚拟机才会对InnerClassHolder进行实例化，进而实例化InnerClassSingleton
        return InnerClassHolder.instence;
    }

}
